# 1 "6502.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "6502.c"
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdint.h" 1 3 4


# 1 "/usr/include/stdint.h" 1 3 4
# 26 "/usr/include/stdint.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 323 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
# 324 "/usr/include/features.h" 2 3 4
# 356 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 353 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 354 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 357 "/usr/include/features.h" 2 3 4
# 388 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4



# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 5 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4




# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
# 389 "/usr/include/features.h" 2 3 4
# 27 "/usr/include/stdint.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wchar.h" 1 3 4
# 28 "/usr/include/stdint.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/stdint.h" 2 3 4
# 37 "/usr/include/stdint.h" 3 4
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;

typedef long int int64_t;







typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;

typedef unsigned int uint32_t;



typedef unsigned long int uint64_t;
# 66 "/usr/include/stdint.h" 3 4
typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;

typedef long int int_least64_t;






typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;

typedef unsigned long int uint_least64_t;
# 91 "/usr/include/stdint.h" 3 4
typedef signed char int_fast8_t;

typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
# 104 "/usr/include/stdint.h" 3 4
typedef unsigned char uint_fast8_t;

typedef unsigned long int uint_fast16_t;
typedef unsigned long int uint_fast32_t;
typedef unsigned long int uint_fast64_t;
# 120 "/usr/include/stdint.h" 3 4
typedef long int intptr_t;


typedef unsigned long int uintptr_t;
# 135 "/usr/include/stdint.h" 3 4
typedef long int intmax_t;
typedef unsigned long int uintmax_t;
# 4 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdint.h" 2 3 4
# 2 "6502.c" 2
# 1 "/usr/include/string.h" 1 3 4
# 29 "/usr/include/string.h" 3 4





# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 212 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 35 "/usr/include/string.h" 2 3 4









extern void *memcpy (void *__restrict __dest,
       __const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern void *memmove (void *__dest, __const void *__src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));






extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
        int __c, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));





extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 95 "/usr/include/string.h" 3 4
extern void *memchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


# 126 "/usr/include/string.h" 3 4


extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
        size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcoll (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern size_t strxfrm (char *__restrict __dest,
         __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));






# 1 "/usr/include/xlocale.h" 1 3 4
# 28 "/usr/include/xlocale.h" 3 4
typedef struct __locale_struct
{

  struct __locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;


  const char *__names[13];
} *__locale_t;


typedef __locale_t locale_t;
# 163 "/usr/include/string.h" 2 3 4


extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));

extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
    __locale_t __l) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));





extern char *strdup (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));






extern char *strndup (__const char *__string, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
# 210 "/usr/include/string.h" 3 4

# 235 "/usr/include/string.h" 3 4
extern char *strchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 262 "/usr/include/string.h" 3 4
extern char *strrchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


# 281 "/usr/include/string.h" 3 4



extern size_t strcspn (__const char *__s, __const char *__reject)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern size_t strspn (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 314 "/usr/include/string.h" 3 4
extern char *strpbrk (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 342 "/usr/include/string.h" 3 4
extern char *strstr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));




extern char *__strtok_r (char *__restrict __s,
    __const char *__restrict __delim,
    char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
         char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
# 397 "/usr/include/string.h" 3 4


extern size_t strlen (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern size_t strnlen (__const char *__string, size_t __maxlen)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern char *strerror (int __errnum) __attribute__ ((__nothrow__));

# 427 "/usr/include/string.h" 3 4
extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__))

                        __attribute__ ((__nonnull__ (2)));
# 445 "/usr/include/string.h" 3 4
extern char *strerror_l (int __errnum, __locale_t __l) __attribute__ ((__nothrow__));





extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern void bcopy (__const void *__src, void *__dest, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 489 "/usr/include/string.h" 3 4
extern char *index (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 517 "/usr/include/string.h" 3 4
extern char *rindex (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
# 536 "/usr/include/string.h" 3 4
extern int strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 559 "/usr/include/string.h" 3 4
extern char *strsep (char **__restrict __stringp,
       __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strsignal (int __sig) __attribute__ ((__nothrow__));


extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));



extern char *__stpncpy (char *__restrict __dest,
   __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
# 646 "/usr/include/string.h" 3 4

# 3 "6502.c" 2
# 1 "/usr/include/stdlib.h" 1 3 4
# 33 "/usr/include/stdlib.h" 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 324 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 3 4
typedef int wchar_t;
# 34 "/usr/include/stdlib.h" 2 3 4








# 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
# 43 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
# 65 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 37 "/usr/include/endian.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
# 38 "/usr/include/endian.h" 2 3 4
# 61 "/usr/include/endian.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
# 62 "/usr/include/endian.h" 2 3 4
# 66 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 2 3 4

union wait
  {
    int w_status;
    struct
      {

 unsigned int __w_termsig:7;
 unsigned int __w_coredump:1;
 unsigned int __w_retcode:8;
 unsigned int:16;







      } __wait_terminated;
    struct
      {

 unsigned int __w_stopval:8;
 unsigned int __w_stopsig:8;
 unsigned int:16;






      } __wait_stopped;
  };
# 44 "/usr/include/stdlib.h" 2 3 4
# 68 "/usr/include/stdlib.h" 3 4
typedef union
  {
    union wait *__uptr;
    int *__iptr;
  } __WAIT_STATUS __attribute__ ((__transparent_union__));
# 96 "/usr/include/stdlib.h" 3 4


typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;







__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;


# 140 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__)) ;




extern double atof (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern int atoi (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern long int atol (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;





__extension__ extern long long int atoll (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;





extern double strtod (__const char *__restrict __nptr,
        char **__restrict __endptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;





extern float strtof (__const char *__restrict __nptr,
       char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;

extern long double strtold (__const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;





extern long int strtol (__const char *__restrict __nptr,
   char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;

extern unsigned long int strtoul (__const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;




__extension__
extern long long int strtoq (__const char *__restrict __nptr,
        char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;





__extension__
extern long long int strtoll (__const char *__restrict __nptr,
         char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;

# 311 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) __attribute__ ((__nothrow__)) ;


extern long int a64l (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;




# 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4


# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;







typedef long int __quad_t;
typedef unsigned long int __u_quad_t;
# 131 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
# 132 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4


typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned long int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;

typedef int __daddr_t;
typedef long int __swblk_t;
typedef int __key_t;


typedef int __clockid_t;


typedef void * __timer_t;


typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;


typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;

typedef long int __ssize_t;



typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;


typedef long int __intptr_t;


typedef unsigned int __socklen_t;
# 31 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4



typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;
# 61 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;
# 99 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __pid_t pid_t;





typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;
# 133 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 58 "/usr/include/time.h" 3 4


typedef __clock_t clock_t;



# 74 "/usr/include/time.h" 3 4


typedef __time_t time_t;



# 92 "/usr/include/time.h" 3 4
typedef __clockid_t clockid_t;
# 104 "/usr/include/time.h" 3 4
typedef __timer_t timer_t;
# 134 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
# 147 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 148 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 201 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 220 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
# 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
# 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
# 32 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4


# 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4



typedef __sigset_t sigset_t;





# 1 "/usr/include/time.h" 1 3 4
# 120 "/usr/include/time.h" 3 4
struct timespec
  {
    __time_t tv_sec;
    long int tv_nsec;
  };
# 45 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4

# 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
# 75 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 47 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4


typedef __suseconds_t suseconds_t;





typedef long int __fd_mask;
# 67 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
typedef struct
  {






    __fd_mask __fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];


  } fd_set;






typedef __fd_mask fd_mask;
# 99 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4

# 109 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout);
# 121 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
      fd_set *__restrict __writefds,
      fd_set *__restrict __exceptfds,
      const struct timespec *__restrict __timeout,
      const __sigset_t *__restrict __sigmask);



# 221 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4


# 1 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 1 3 4
# 30 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
__extension__
extern unsigned int gnu_dev_major (unsigned long long int __dev)
     __attribute__ ((__nothrow__));
__extension__
extern unsigned int gnu_dev_minor (unsigned long long int __dev)
     __attribute__ ((__nothrow__));
__extension__
extern unsigned long long int gnu_dev_makedev (unsigned int __major,
            unsigned int __minor)
     __attribute__ ((__nothrow__));
# 224 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4





typedef __blksize_t blksize_t;






typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 271 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
# 23 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
# 50 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
typedef unsigned long int pthread_t;


typedef union
{
  char __size[56];
  long int __align;
} pthread_attr_t;



typedef struct __pthread_internal_list
{
  struct __pthread_internal_list *__prev;
  struct __pthread_internal_list *__next;
} __pthread_list_t;
# 76 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
typedef union
{
  struct __pthread_mutex_s
  {
    int __lock;
    unsigned int __count;
    int __owner;

    unsigned int __nusers;



    int __kind;

    int __spins;
    __pthread_list_t __list;
# 101 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  } __data;
  char __size[40];
  long int __align;
} pthread_mutex_t;

typedef union
{
  char __size[4];
  int __align;
} pthread_mutexattr_t;




typedef union
{
  struct
  {
    int __lock;
    unsigned int __futex;
    __extension__ unsigned long long int __total_seq;
    __extension__ unsigned long long int __wakeup_seq;
    __extension__ unsigned long long int __woken_seq;
    void *__mutex;
    unsigned int __nwaiters;
    unsigned int __broadcast_seq;
  } __data;
  char __size[48];
  __extension__ long long int __align;
} pthread_cond_t;

typedef union
{
  char __size[4];
  int __align;
} pthread_condattr_t;



typedef unsigned int pthread_key_t;



typedef int pthread_once_t;





typedef union
{

  struct
  {
    int __lock;
    unsigned int __nr_readers;
    unsigned int __readers_wakeup;
    unsigned int __writer_wakeup;
    unsigned int __nr_readers_queued;
    unsigned int __nr_writers_queued;
    int __writer;
    int __shared;
    unsigned long int __pad1;
    unsigned long int __pad2;


    unsigned int __flags;
  } __data;
# 187 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  char __size[56];
  long int __align;
} pthread_rwlock_t;

typedef union
{
  char __size[8];
  long int __align;
} pthread_rwlockattr_t;





typedef volatile int pthread_spinlock_t;




typedef union
{
  char __size[32];
  long int __align;
} pthread_barrier_t;

typedef union
{
  char __size[4];
  int __align;
} pthread_barrierattr_t;
# 272 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4



# 321 "/usr/include/stdlib.h" 2 3 4






extern long int random (void) __attribute__ ((__nothrow__));


extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__));





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));



extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));






extern int rand (void) __attribute__ ((__nothrow__));

extern void srand (unsigned int __seed) __attribute__ ((__nothrow__));




extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__));







extern double drand48 (void) __attribute__ ((__nothrow__));
extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern long int lrand48 (void) __attribute__ ((__nothrow__));
extern long int nrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern long int mrand48 (void) __attribute__ ((__nothrow__));
extern long int jrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern void srand48 (long int __seedval) __attribute__ ((__nothrow__));
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));









extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;










extern void *realloc (void *__ptr, size_t __size)
     __attribute__ ((__nothrow__)) __attribute__ ((__warn_unused_result__));

extern void free (void *__ptr) __attribute__ ((__nothrow__));




extern void cfree (void *__ptr) __attribute__ ((__nothrow__));



# 1 "/usr/include/alloca.h" 1 3 4
# 25 "/usr/include/alloca.h" 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 26 "/usr/include/alloca.h" 2 3 4







extern void *alloca (size_t __size) __attribute__ ((__nothrow__));






# 498 "/usr/include/stdlib.h" 2 3 4





extern void *valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;




extern void abort (void) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
# 531 "/usr/include/stdlib.h" 3 4





extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern void exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
# 554 "/usr/include/stdlib.h" 3 4






extern void _Exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));






extern char *getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;




extern char *__secure_getenv (__const char *__name)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;





extern int putenv (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





extern int setenv (__const char *__name, __const char *__value, int __replace)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));


extern int unsetenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern int clearenv (void) __attribute__ ((__nothrow__));
# 606 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
# 620 "/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 642 "/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
# 663 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
# 712 "/usr/include/stdlib.h" 3 4





extern int system (__const char *__command) ;

# 734 "/usr/include/stdlib.h" 3 4
extern char *realpath (__const char *__restrict __name,
         char *__restrict __resolved) __attribute__ ((__nothrow__)) ;






typedef int (*__compar_fn_t) (__const void *, __const void *);
# 752 "/usr/include/stdlib.h" 3 4



extern void *bsearch (__const void *__key, __const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     __attribute__ ((__nonnull__ (1, 2, 5))) ;



extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
# 771 "/usr/include/stdlib.h" 3 4
extern int abs (int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern long int labs (long int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;



__extension__ extern long long int llabs (long long int __x)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;







extern div_t div (int __numer, int __denom)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;




__extension__ extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;

# 808 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *gcvt (double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));







extern int mblen (__const char *__s, size_t __n) __attribute__ ((__nothrow__)) ;


extern int mbtowc (wchar_t *__restrict __pwc,
     __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__)) ;


extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__)) ;



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));

extern size_t wcstombs (char *__restrict __s,
   __const wchar_t *__restrict __pwcs, size_t __n)
     __attribute__ ((__nothrow__));








extern int rpmatch (__const char *__response) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
# 896 "/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
        char *__const *__restrict __tokens,
        char **__restrict __valuep)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2, 3))) ;
# 948 "/usr/include/stdlib.h" 3 4
extern int getloadavg (double __loadavg[], int __nelem)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
# 964 "/usr/include/stdlib.h" 3 4

# 4 "6502.c" 2
# 1 "/usr/include/stdio.h" 1 3 4
# 30 "/usr/include/stdio.h" 3 4




# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 35 "/usr/include/stdio.h" 2 3 4
# 45 "/usr/include/stdio.h" 3 4
struct _IO_FILE;



typedef struct _IO_FILE FILE;





# 65 "/usr/include/stdio.h" 3 4
typedef struct _IO_FILE __FILE;
# 75 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/libio.h" 1 3 4
# 32 "/usr/include/libio.h" 3 4
# 1 "/usr/include/_G_config.h" 1 3 4
# 15 "/usr/include/_G_config.h" 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stddef.h" 1 3 4
# 16 "/usr/include/_G_config.h" 2 3 4




# 1 "/usr/include/wchar.h" 1 3 4
# 83 "/usr/include/wchar.h" 3 4
typedef struct
{
  int __count;
  union
  {

    unsigned int __wch;



    char __wchb[4];
  } __value;
} __mbstate_t;
# 21 "/usr/include/_G_config.h" 2 3 4

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 53 "/usr/include/_G_config.h" 3 4
typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 33 "/usr/include/libio.h" 2 3 4
# 53 "/usr/include/libio.h" 3 4
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h" 1 3 4
# 40 "/usr/lib/gcc/x86_64-linux-gnu/4.6.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 54 "/usr/include/libio.h" 2 3 4
# 170 "/usr/include/libio.h" 3 4
struct _IO_jump_t; struct _IO_FILE;
# 180 "/usr/include/libio.h" 3 4
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 203 "/usr/include/libio.h" 3 4
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 271 "/usr/include/libio.h" 3 4
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;



  int _flags2;

  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 319 "/usr/include/libio.h" 3 4
  __off64_t _offset;
# 328 "/usr/include/libio.h" 3 4
  void *__pad1;
  void *__pad2;
  void *__pad3;
  void *__pad4;
  size_t __pad5;

  int _mode;

  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 364 "/usr/include/libio.h" 3 4
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
     size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);
# 416 "/usr/include/libio.h" 3 4
extern int __underflow (_IO_FILE *);
extern int __uflow (_IO_FILE *);
extern int __overflow (_IO_FILE *, int);
# 460 "/usr/include/libio.h" 3 4
extern int _IO_getc (_IO_FILE *__fp);
extern int _IO_putc (int __c, _IO_FILE *__fp);
extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));

extern int _IO_peekc_locked (_IO_FILE *__fp);





extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
# 490 "/usr/include/libio.h" 3 4
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
   __gnuc_va_list, int *__restrict);
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
    __gnuc_va_list);
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);

extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
# 76 "/usr/include/stdio.h" 2 3 4




typedef __gnuc_va_list va_list;
# 109 "/usr/include/stdio.h" 3 4


typedef _G_fpos_t fpos_t;




# 161 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
# 162 "/usr/include/stdio.h" 2 3 4



extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;







extern int remove (__const char *__filename) __attribute__ ((__nothrow__));

extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));




extern int renameat (int __oldfd, __const char *__old, int __newfd,
       __const char *__new) __attribute__ ((__nothrow__));








extern FILE *tmpfile (void) ;
# 206 "/usr/include/stdio.h" 3 4
extern char *tmpnam (char *__s) __attribute__ ((__nothrow__)) ;





extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__)) ;
# 224 "/usr/include/stdio.h" 3 4
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;








extern int fclose (FILE *__stream);




extern int fflush (FILE *__stream);

# 249 "/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 263 "/usr/include/stdio.h" 3 4






extern FILE *fopen (__const char *__restrict __filename,
      __const char *__restrict __modes) ;




extern FILE *freopen (__const char *__restrict __filename,
        __const char *__restrict __modes,
        FILE *__restrict __stream) ;
# 292 "/usr/include/stdio.h" 3 4

# 303 "/usr/include/stdio.h" 3 4
extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__)) ;
# 316 "/usr/include/stdio.h" 3 4
extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
  __attribute__ ((__nothrow__)) ;




extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__)) ;






extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) __attribute__ ((__nothrow__));





extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) __attribute__ ((__nothrow__));


extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));








extern int fprintf (FILE *__restrict __stream,
      __const char *__restrict __format, ...);




extern int printf (__const char *__restrict __format, ...);

extern int sprintf (char *__restrict __s,
      __const char *__restrict __format, ...) __attribute__ ((__nothrow__));





extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg);




extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg) __attribute__ ((__nothrow__));





extern int snprintf (char *__restrict __s, size_t __maxlen,
       __const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));

# 414 "/usr/include/stdio.h" 3 4
extern int vdprintf (int __fd, __const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));








extern int fscanf (FILE *__restrict __stream,
     __const char *__restrict __format, ...) ;




extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s,
     __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
# 445 "/usr/include/stdio.h" 3 4
extern int fscanf (FILE *__restrict __stream, __const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")

                               ;
extern int scanf (__const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")
                              ;
extern int sscanf (__const char *__restrict __s, __const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__))

                      ;
# 465 "/usr/include/stdio.h" 3 4








extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0))) ;





extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0))) ;


extern int vsscanf (__const char *__restrict __s,
      __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
# 496 "/usr/include/stdio.h" 3 4
extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")



     __attribute__ ((__format__ (__scanf__, 2, 0))) ;
extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")

     __attribute__ ((__format__ (__scanf__, 1, 0))) ;
extern int vsscanf (__const char *__restrict __s, __const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__))



     __attribute__ ((__format__ (__scanf__, 2, 0)));
# 524 "/usr/include/stdio.h" 3 4









extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);





extern int getchar (void);

# 552 "/usr/include/stdio.h" 3 4
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 563 "/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);











extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);





extern int putchar (int __c);

# 596 "/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);







extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);






extern int getw (FILE *__stream);


extern int putw (int __w, FILE *__stream);








extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     ;






extern char *gets (char *__s) ;

# 658 "/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
          size_t *__restrict __n, int __delimiter,
          FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
        size_t *__restrict __n, int __delimiter,
        FILE *__restrict __stream) ;







extern __ssize_t getline (char **__restrict __lineptr,
       size_t *__restrict __n,
       FILE *__restrict __stream) ;








extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);





extern int puts (__const char *__s);






extern int ungetc (int __c, FILE *__stream);






extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream) ;




extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);

# 730 "/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);








extern int fseek (FILE *__stream, long int __off, int __whence);




extern long int ftell (FILE *__stream) ;




extern void rewind (FILE *__stream);

# 766 "/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off_t __off, int __whence);




extern __off_t ftello (FILE *__stream) ;
# 785 "/usr/include/stdio.h" 3 4






extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);




extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
# 808 "/usr/include/stdio.h" 3 4

# 817 "/usr/include/stdio.h" 3 4


extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));

extern int feof (FILE *__stream) __attribute__ ((__nothrow__)) ;

extern int ferror (FILE *__stream) __attribute__ ((__nothrow__)) ;




extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;








extern void perror (__const char *__s);






# 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
# 27 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
extern int sys_nerr;
extern __const char *__const sys_errlist[];
# 847 "/usr/include/stdio.h" 2 3 4




extern int fileno (FILE *__stream) __attribute__ ((__nothrow__)) ;




extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
# 866 "/usr/include/stdio.h" 3 4
extern FILE *popen (__const char *__command, __const char *__modes) ;





extern int pclose (FILE *__stream);





extern char *ctermid (char *__s) __attribute__ ((__nothrow__));
# 906 "/usr/include/stdio.h" 3 4
extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));



extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__)) ;


extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
# 936 "/usr/include/stdio.h" 3 4

# 5 "6502.c" 2
# 1 "NESMemory.h" 1



# 1 "romLoader.h" 1





typedef struct {

    uint8_t NES[3];
    uint8_t Magic;
    uint8_t PRGBanks;
    uint8_t VROMBanks;
    uint8_t RCB1;
    uint8_t RCB2;
    uint8_t RAMBanks;
    uint8_t RESERVED[7];

} RomImageHeader;

typedef struct {

    RomImageHeader *Header;
    uint8_t *Trainer;
    uint8_t **PRGROM;
    uint8_t **VROM;

} RomImage;

typedef enum {
    M_HORIZONTAL = 0,
    M_VERTICAL = 1
} ROMMirroring;

RomImage* LoadROMImage(const char* Filename);

ROMMirroring GetROMMirroring(RomImage* ROM);
uint8_t GetROMSRAMEnabled(RomImage* ROM);
uint8_t GetROMTrainerEnabled(RomImage* ROM);
uint8_t GetROM4ScreenMirroringEnabled(RomImage* ROM);
uint8_t GetROMMapper(RomImage* ROM);
void PrintROMImageInformation(RomImage* ROM);
# 5 "NESMemory.h" 2


typedef struct {
    uint8_t RAM[0x2000];
    uint8_t IO [0x2020];
    uint8_t Expansion[0x1FE0];
    uint8_t SRAM[0x2000];
    uint8_t PRGROML[0x4000];
    uint8_t PRGROMH[0x4000];
} NESMainMemory;






uint8_t ReadMemory(uint16_t Addr);
void WriteMemory(uint16_t Addr, uint8_t Val);




void initNESMemory(RomImage *ROM);
# 6 "6502.c" 2
# 1 "6502.h" 1





typedef struct {

    uint8_t A;
    uint8_t X;
    uint8_t Y;
    uint8_t P;
    uint16_t PC;
    uint8_t S;




    volatile uint8_t ACC_OP;


    uint16_t LastEffectiveAddress;

    uint8_t InstructionClockTicks;

    uint8_t CurrentOpcode;


    uint64_t ClockTicks;

    uint8_t PendingInterrupts;


    volatile uint8_t AMPreventRead;


    uint16_t DMACycles;



} __Context;


typedef enum {
    AM_IMMEDIATE = 0,
    AM_RELATIVE,
    AM_IMPLIED,
    AM_ACCUMULATOR,
    AM_ZERO_PAGE,
    AM_ZERO_PAGE_X,
    AM_ZERO_PAGE_Y,
    AM_ABSOLUTE,
    AM_ABSOLUTE_X,
    AM_ABSOLUTE_Y,
    AM_INDIRECT,
    AM_INDIRECT_X,
    AM_INDIRECT_Y,
} __AddrModes;

typedef struct{
    void (*InstructionPtr)();
    __AddrModes AddressingMode;
    uint8_t Size;
    uint8_t OpCycles;
    uint8_t ScanData;
    uint8_t LastEffectiveAddressInstruction;
} InstructionData;
# 97 "6502.h"
void init6502();

int32_t INT_Main(int32_t Cycles);
int32_t INT_runCycles(int32_t Cycles);

void CPUsetNMI();
void CPUsetIRQ();

void CPUaddDMACycles(uint16_t Cycles);

void TerminateCPU();

uint8_t CPUGetInstructionSize(uint8_t Opcode);
# 7 "6502.c" 2
# 1 "6502_Debug.h" 1







typedef enum {
    DHT_PCBREAK,
    DHT_MEMWATCH,
    DHT_REGWATCH
} DBG_HOOK_TYPE;

typedef enum{
    DREG_A,
    DREG_Y,
    DREG_X,
    DREG_S,
    DREG_P,
    DREG_PC
} DREG_TYPE;

typedef enum{
    DA_READ = 0x01,
    DA_WRITE = 0x02
} DACC_ACTION;

typedef struct {
    DBG_HOOK_TYPE HookType;
    uint32_t HookID;
    union{
        struct PCBreak{
            uint16_t BreakAddr;
        } PCBreak;
        struct MemWatchHook{
            uint16_t Addr;
            DACC_ACTION ActionFlags;
            DACC_ACTION BrokeOn;
            uint8_t BreakValue;
        } MemWatchHook;
        struct RegWatchHook{
            DREG_TYPE Register;
            DACC_ACTION ActionFlags;
        } RegWatchHook;
    } Data;

    struct DebugHook *Next;
} DebugHook;




typedef struct {
    DebugHook *DebugHookList;
    DebugHook *DebugHookListEnd;
    uint32_t OperationFlags;
    uint32_t NextHookID;
} __Debug_Context;




typedef struct History{
    uint16_t Address;
    uint8_t Opcode;
    uint8_t Operands[3];
} __InstructionHistoryData;

typedef struct {
    __InstructionHistoryData History[20];

    uint32_t NextPos;
    uint32_t StartPos;
    uint32_t CurrentInstr;
} __InstructionRecord;

void debugPrompt(DebugHook *SourceHook);
void debugCycle(void);
void initDebug();

void DBGRecordInstruction(uint8_t Opcode, uint8_t* Operands, uint16_t Address);
# 8 "6502.c" 2
# 1 "JRYNES.h" 1
# 20 "JRYNES.h"
typedef struct{
    uint32_t xScaling;
    uint32_t yScaling;
    uint64_t ArgumentFlags;
    uint32_t CompilationThreshold;
    uint8_t ContextMask;
    uint64_t ContextThreshold;
    uint32_t MaxContexts;
    char* RecordMovieFile;
    char* PlayMovieFile;

    uint64_t CycleCounterPeriod;
    char CycleCounterFilename[0x100];
} EmulationSettings;
# 9 "6502.c" 2

extern EmulationSettings Settings;


# 1 "6502_InstructionDeclarations.h" 1






    inline void adc(void) __attribute((always_inline));
    inline void and(void) __attribute((always_inline));
    inline void asl(void) __attribute((always_inline));
    inline void bcc(void) __attribute((always_inline));
    inline void bcs(void) __attribute((always_inline));
    inline void beq(void) __attribute((always_inline));
    inline void bit(void) __attribute((always_inline));
    inline void bmi(void) __attribute((always_inline));
    inline void bne(void) __attribute((always_inline));
    inline void bpl(void) __attribute((always_inline));
    inline void brk(void) __attribute((always_inline));
    inline void bvc(void) __attribute((always_inline));
    inline void bvs(void) __attribute((always_inline));
    inline void clc(void) __attribute((always_inline));
    inline void cld(void) __attribute((always_inline));
    inline void cli(void) __attribute((always_inline));
    inline void clv(void) __attribute((always_inline));
    inline void cmp(void) __attribute((always_inline));
    inline void cpx(void) __attribute((always_inline));
    inline void cpy(void) __attribute((always_inline));
    inline void dec(void) __attribute((always_inline));
    inline void dex(void) __attribute((always_inline));
    inline void dey(void) __attribute((always_inline));
    inline void eor(void) __attribute((always_inline));
    inline void inc(void) __attribute((always_inline));
    inline void inx(void) __attribute((always_inline));
    inline void iny(void) __attribute((always_inline));
    inline void jmp(void) __attribute((always_inline));
    inline void jsr(void) __attribute((always_inline));
    inline void lda(void) __attribute((always_inline));
    inline void ldx(void) __attribute((always_inline));
    inline void ldy(void) __attribute((always_inline));
    inline void lsr(void) __attribute((always_inline));
    inline void nop(void) __attribute((always_inline));
    inline void ora(void) __attribute((always_inline));
    inline void pha(void) __attribute((always_inline));
    inline void php(void) __attribute((always_inline));
    inline void pla(void) __attribute((always_inline));
    inline void plp(void) __attribute((always_inline));
    inline void rol(void) __attribute((always_inline));
    inline void ror(void) __attribute((always_inline));
    inline void rti(void) __attribute((always_inline));
    inline void rts(void) __attribute((always_inline));
    inline void sbc(void) __attribute((always_inline));
    inline void sec(void) __attribute((always_inline));
    inline void sed(void) __attribute((always_inline));
    inline void sei(void) __attribute((always_inline));
    inline void sta(void) __attribute((always_inline));
    inline void stx(void) __attribute((always_inline));
    inline void sty(void) __attribute((always_inline));
    inline void tax(void) __attribute((always_inline));
    inline void tay(void) __attribute((always_inline));
    inline void tsx(void) __attribute((always_inline));
    inline void txa(void) __attribute((always_inline));
    inline void txs(void) __attribute((always_inline));
    inline void tya(void) __attribute((always_inline));
# 14 "6502.c" 2






inline uint16_t MakeWord(uint8_t LSB, uint8_t HSB){
    uint16_t Word = 0;
    Word = LSB | (HSB << 8);
    return Word;
}

const char* __AddrModeText[] = {
    "AM_IMMEDIATE",
    "AM_RELATIVE",
    "AM_IMPLIED",
    "AM_ACCUMULATOR",
    "AM_ZERO_PAGE",
    "AM_ZERO_PAGE_X",
    "AM_ZERO_PAGE_Y",
    "AM_ABSOLUTE",
    "AM_ABSOLUTE_X",
    "AM_ABSOLUTE_Y",
    "AM_INDIRECT",
    "AM_INDIRECT_X",
    "AM_INDIRECT_Y"
};



extern __Context CPU;
# 87 "6502.c"
void PrintCPUStatus(){
    fprintf(stderr, "CPU Context:\n");
    fprintf(stderr, "\tA:0x%02X, PC:0x%02X, S:0x%02X\n", CPU.A, CPU.PC, CPU.S);
    fprintf(stderr, "\tX:0x%02X, Y:0x%02X\n", CPU.X, CPU.Y);

    fprintf(stderr, "\tP: (0x%02X) - [", CPU.P);
    fprintf(stderr, "%c ", (CPU.P & 0x80) ? 'S' : '_');
    fprintf(stderr, "%c ", (CPU.P & 0x40) ? 'V' : '_');
    fprintf(stderr, "%c ", (CPU.P & 0x20) ? '1' : '0');
    fprintf(stderr, "%c ", (CPU.P & 0x10) ? 'B' : '_');
    fprintf(stderr, "%c ", (CPU.P & 0x08) ? 'D' : '_');
    fprintf(stderr, "%c ", (CPU.P & 0x04) ? 'I' : '_');
    fprintf(stderr, "%c ", (CPU.P & 0x02) ? 'Z' : '_');
    fprintf(stderr, "%c", (CPU.P & 0x01) ? 'C' : '_');
    fprintf(stderr, "]\n");

    fprintf(stderr, "\tLast Effective Address: 0x%04X\n", CPU.LastEffectiveAddress);
    fprintf(stderr, "\tElapsed clock ticks: %ld\n", CPU.ClockTicks);
    fprintf(stderr, "\tCurrent Opcode: 0x%02X\n", CPU.CurrentOpcode);

    fprintf(stderr, "\tPending interrupts: (0x%02X) ", CPU.PendingInterrupts);

    fprintf(stderr, "%s ", CPU.PendingInterrupts & 0x02 ? "IRQ" : "_");
    fprintf(stderr, "%s ", CPU.PendingInterrupts & 0x01 ? "NMI" : "_");
    fprintf(stderr, "\n");

    fprintf(stderr, "\tAM Prevent Read: %d\n", CPU.AMPreventRead);
    fprintf(stderr, "\tAccumulator as operand: %d\n", CPU.ACC_OP);
    fprintf(stderr, "\n");
}




extern uint8_t (*AddressingModeDecoders[13])();
# 379 "6502.c"
extern const InstructionData Instructions[256];
# 391 "6502.c"
void adc(void) {


    uint32_t Temp32;
    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 413 "6502.c"
    Temp32 = CPU.A + Value + (CPU.P & 0x01);


    if(Temp32 > 0xFF)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);



    if(!((CPU.A ^ Value) & 0x80) && ((CPU.A ^ Temp32) & 0x80))
        (CPU.P |= 0x40);
    else
        (CPU.P &= 0xBF);

    CPU.A = ((uint8_t) Temp32) & 0xFF;


    if(CPU.A & 0xFF)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);


    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

}



void and(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 467 "6502.c"
    Value &= CPU.A;


    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);


    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.A = Value;
}



void asl(void){


    uint8_t Value;
    uint8_t Temp8;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 508 "6502.c"
    Temp8 = CPU.ACC_OP ? CPU.A : Value;



    if(Temp8 & 0x80)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);

    Temp8 <<= 1;

    Temp8 &= 0xFE;


    if(Temp8 & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);


    if(Temp8)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    if(CPU.ACC_OP){
        CPU.A = Temp8;
        CPU.ACC_OP = 0;
    }
    else
        WriteMemory(CPU.LastEffectiveAddress, Temp8);
}


static inline void branch(uint8_t Flag, uint8_t Offset)

__attribute((always_inline))




;

static inline void branch(uint8_t Flag, uint8_t Offset){
    uint16_t NewAddress;
    int16_t Disp;
# 563 "6502.c"
    if(Flag){
        Disp = (int8_t) Offset;

        NewAddress = CPU.PC + Disp;

        CPU.InstructionClockTicks +=
            ((CPU.PC & 0xFF00) != (NewAddress & 0xFF00))
            ? 2
            : 1;

        CPU.PC = NewAddress;
    }
}




void bcc(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 597 "6502.c"
    CPU.PC += Instructions[0x90].Size;

    branch(!(CPU.P & 0x01), Value);
}



void bcs(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 621 "6502.c"
    CPU.PC += Instructions[0xB0].Size;

    branch((CPU.P & 0x01), Value);
}



void beq(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 645 "6502.c"
    CPU.PC += Instructions[0xF0].Size;

    branch((CPU.P & 0x02), Value);
}



void bit(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 674 "6502.c"
    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);


    if(Value & 0x40)
        (CPU.P |= 0x40);
    else
        (CPU.P &= 0xBF);




    if(CPU.A & Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);


}



void bmi(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 715 "6502.c"
    CPU.PC += Instructions[0x30].Size;

    branch((CPU.P & 0x80), Value);
}



void bne(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 739 "6502.c"
    CPU.PC += Instructions[0xD0].Size;

    branch(!(CPU.P & 0x02), Value);
}



void bpl(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 763 "6502.c"
    CPU.PC += Instructions[0x10].Size;

    branch(!(CPU.P & 0x80), Value);
}



void brk(void){
# 783 "6502.c"
    CPU.PC+= Instructions[0x00].Size;

    WriteMemory((CPU.S | 0x100), ((CPU.PC >> 8) & 0xFF)); CPU.S--;
    WriteMemory((CPU.S | 0x100), (CPU.PC & 0xFF)); CPU.S--;


    (CPU.P |= 0x10);

    WriteMemory((CPU.S | 0x100), CPU.P); CPU.S--;


    (CPU.P |= 0x04);

    CPU.PC = (ReadMemory(0xFFFE) | (ReadMemory(0xFFFF) << 8));
}



void bvc(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 818 "6502.c"
    CPU.PC += Instructions[0x50].Size;

    branch(!(CPU.P & 0x40), Value);
}



void bvs(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 842 "6502.c"
    CPU.PC += Instructions[0x70].Size;

    branch((CPU.P & 0x40), Value);
}



void clc(void){
# 862 "6502.c"
    (CPU.P &= 0xFE);
}



void cld(void){
# 880 "6502.c"
    (CPU.P &= 0xF7);
}



void cli(void){
# 898 "6502.c"
    (CPU.P &= 0xFB);
}



void clv(void){
# 916 "6502.c"
    (CPU.P &= 0xBF);
}



void cmp(void){

    uint8_t Value;
    uint32_t Temp32;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 942 "6502.c"
    Temp32 = CPU.A - Value;

    if(Temp32 & 0x100)
        (CPU.P &= 0xFE);
    else
        (CPU.P |= 0x01);

    Value = (uint8_t)Temp32;

    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value & 0xFF)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

}



void cpx(void){


    uint8_t Value;
    uint32_t Temp32;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 987 "6502.c"
    Temp32 = CPU.X - Value;

    if(Temp32 & 0x100)
        (CPU.P &= 0xFE);
    else
        (CPU.P |= 0x01);

    Value = (uint8_t)Temp32;

    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value & 0xFF)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void cpy(void){

    uint8_t Value;
    uint32_t Temp32;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1030 "6502.c"
    Temp32 = CPU.Y - Value;

    if(Temp32 & 0x100)
        (CPU.P &= 0xFE);
    else
        (CPU.P |= 0x01);

    Value = (uint8_t)Temp32;

    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value & 0xFF)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void dec(void){

    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1072 "6502.c"
    Value = (Value - 1) & 0xFF;

    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    WriteMemory(CPU.LastEffectiveAddress, Value);
}



void dex(void){
# 1102 "6502.c"
    CPU.X = (CPU.X - 1) & 0xFF;

    if(CPU.X & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.X)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void dey(void){
# 1130 "6502.c"
    CPU.Y = (CPU.Y - 1) & 0xFF;

    if(CPU.Y & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.Y)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void eor(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1166 "6502.c"
    CPU.A ^= Value;

    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.A)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void inc(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1202 "6502.c"
    Value = (Value + 1) & 0xFF;

    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    WriteMemory(CPU.LastEffectiveAddress, Value);
}



void inx(void){
# 1232 "6502.c"
    CPU.X = (CPU.X + 1) & 0xFF;

    if(CPU.X & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.X)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void iny(void){
# 1260 "6502.c"
    CPU.Y = (CPU.Y + 1) & 0xFF;

    if(CPU.Y & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.Y)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);
}



void jmp(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1296 "6502.c"
    CPU.PC = CPU.LastEffectiveAddress;
}



void jsr(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1322 "6502.c"
    CPU.PC += 2;

    WriteMemory((CPU.S | 0x100), ((CPU.PC >> 8) & 0xFF)); CPU.S--;
    WriteMemory((CPU.S | 0x100), (CPU.PC & 0xFF)); CPU.S--;

    CPU.PC = CPU.LastEffectiveAddress;
}



void lda(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1353 "6502.c"
    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.A = Value;
}



void ldx(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1389 "6502.c"
    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.X = Value;
}



void ldy(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1425 "6502.c"
    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.Y = Value;
}



void lsr(void){


    uint8_t Value;
    uint8_t Temp8;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1462 "6502.c"
    Temp8 = CPU.ACC_OP ? CPU.A : Value;



    if(Temp8 & 0x01)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);

    Temp8 >>= 1;


    Temp8 &= 0x7F;


    (CPU.P &= 0x7F);


    if(Temp8)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    if(CPU.ACC_OP){
        CPU.A = Temp8;
        CPU.ACC_OP = 0;
    }
    else
        WriteMemory(CPU.LastEffectiveAddress, Temp8);
}



void nop(void){
# 1507 "6502.c"
}



void ora(void){


    uint8_t Value;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1532 "6502.c"
    Value |= CPU.A;


    if(Value & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);


    if(Value)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.A = Value;
}



void pha(void){
# 1564 "6502.c"
    WriteMemory((CPU.S | 0x100), CPU.A); CPU.S--;
}



void php(void){
# 1583 "6502.c"
    WriteMemory((CPU.S | 0x100), (CPU.P | 0x10)); CPU.S--;
}



void pla(void){
# 1601 "6502.c"
    CPU.A = ReadMemory((++CPU.S) | 0x100);

    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.A)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

}



void plp(void){
# 1630 "6502.c"
    CPU.P = ReadMemory((++CPU.S) | 0x100);
}



void rol(void){


    uint8_t Value;
    uint16_t Temp16;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1657 "6502.c"
    Temp16 = CPU.ACC_OP ? CPU.A : Value;

    Temp16 <<= 1;

    if((CPU.P & 0x01))
        Temp16 |= 1;
    else
        Temp16 &= 0xFE;

    if(Temp16 & 0x100)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);

    Temp16 &= 0xFF;

    if(Temp16 & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Temp16)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    if(CPU.ACC_OP){
        CPU.A = (uint8_t) Temp16;
        CPU.ACC_OP = 0;
    }
    else
        WriteMemory(CPU.LastEffectiveAddress, ((uint8_t)Temp16));
}



void ror(void){


    uint8_t Value;
    uint16_t Temp16;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1715 "6502.c"
    Temp16 = CPU.ACC_OP ? CPU.A : Value;

    if((CPU.P & 0x01))
        Temp16 |= 0x100;

    if(Temp16 & 0x01)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);

    Temp16 >>= 1;

    Temp16 &= 0xFF;

    if(Temp16 & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(Temp16)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    if(CPU.ACC_OP){
        CPU.A = (uint8_t)Temp16;
        CPU.ACC_OP = 0;
    }
    else
        WriteMemory(CPU.LastEffectiveAddress, ((uint8_t)Temp16));
}



void rti(void){
# 1763 "6502.c"
    uint8_t H, L;


    CPU.P = ReadMemory((++CPU.S) | 0x100);
    L = ReadMemory((++CPU.S) | 0x100);
    H = ReadMemory((++CPU.S) | 0x100);

    CPU.PC = MakeWord(L, H);
}



void rts(void){
# 1789 "6502.c"
    uint8_t H, L;


    L = ReadMemory((++CPU.S) | 0x100);
    H = ReadMemory((++CPU.S) | 0x100);

    CPU.PC = MakeWord(L, H);
    CPU.PC++;
}



void sbc(void){

    uint8_t Value;
    uint32_t Temp32;
    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();
# 1822 "6502.c"
    Value ^=0xFF;

    Temp32 = CPU.A + Value + (CPU.P & 0x01);


    if(Temp32 > 0xFF)
        (CPU.P |= 0x01);
    else
        (CPU.P &= 0xFE);


    if(!((CPU.A ^ Value) & 0x80) && ((CPU.A ^ Temp32) & 0x80))
        (CPU.P |= 0x40);
    else
        (CPU.P &= 0xBF);

    CPU.A = ((uint8_t) Temp32) & 0xFF;


    if(CPU.A & 0xFF)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);


    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

}



void sec(void){
# 1869 "6502.c"
    (CPU.P |= 0x01);
}



void sed(void){
# 1887 "6502.c"
    (CPU.P |= 0x08);
}



void sei(void){
# 1905 "6502.c"
    (CPU.P |= 0x04);
}



void sta(void){

    uint8_t Value;


    CPU.AMPreventRead = 1;


    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();




    CPU.AMPreventRead = 0;
# 1937 "6502.c"
    WriteMemory(CPU.LastEffectiveAddress, CPU.A);
}



void stx(void){


    uint8_t Value;

    CPU.AMPreventRead = 1;

    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();

    CPU.AMPreventRead = 0;
# 1968 "6502.c"
    WriteMemory(CPU.LastEffectiveAddress, CPU.X);
}



void sty(void){


    uint8_t Value;

    CPU.AMPreventRead = 1;

    Value = AddressingModeDecoders[Instructions[CPU.CurrentOpcode].AddressingMode]();

    CPU.AMPreventRead = 0;
# 1999 "6502.c"
    WriteMemory(CPU.LastEffectiveAddress, CPU.Y);
}



void tax(void){
# 2017 "6502.c"
    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.A)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.X = CPU.A;
}



void tay(void){
# 2045 "6502.c"
    if(CPU.A & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.A)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.Y = CPU.A;
}



void tsx(void){
# 2073 "6502.c"
    if(CPU.S & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.S)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.X = CPU.S;
}



void txa(void){
# 2101 "6502.c"
    if(CPU.X & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.X)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.A = CPU.X;
}



void txs(void){
# 2129 "6502.c"
    CPU.S = CPU.X;
}



void tya(void){
# 2147 "6502.c"
    if(CPU.Y & 0x80)
        (CPU.P |= 0x80);
    else
        (CPU.P &= 0x7F);

    if(CPU.Y)
        (CPU.P &= 0xFD);
    else
        (CPU.P |= 0x02);

    CPU.A = CPU.Y;
}



void jam(void){
    printf("\n\nInvalid Opcode!\n");
    PrintCPUStatus();
    debugPrompt(((void *)0));
}
# 2209 "6502.c"
void TerminateCPU(){
    PrintCPUStatus();
}
# 2362 "6502.c"
uint8_t CPUGetInstructionSize(uint8_t Opcode){

    uint8_t Size;

    Size = Instructions[Opcode].Size;

    if(!Size){
        if(Instructions[Opcode].AddressingMode == AM_ABSOLUTE)
            Size = 3;
        else if(Instructions[Opcode].AddressingMode == AM_IMPLIED)
            Size = 1;
        else if(Instructions[Opcode].AddressingMode == AM_INDIRECT)
            Size = 3;
        else{
            fprintf(stderr, "%d: Error generating code: Instruction cannot have size 0.\n\n", 2376);
            exit(1);
        }
    }

    return Size;
}
